iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
Mobile Development

就是從無到有寫app系列 第 25

第25天~還是Firebase

  • 分享至 

  • xImage
  •  

還是Firebase

SQLite將PostgreSQL作為參考平台。

https://ithelp.ithome.com.tw/upload/images/20220204/20119035cRm7qaaRiV.png

開始改java檔

從宣告變數開始~ 原來程式碼也要改位置

https://ithelp.ithome.com.tw/upload/images/20220204/201190354zQh1KtpPr.png

package com.huang.myfirebase01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class MainActivity extends AppCompatActivity {
    // 宣告變數
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("data");
    EditText editText;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化


    }

    public void onClick(View view) {
    }
}

https://ithelp.ithome.com.tw/upload/images/20220204/20119035iWW6afm7nW.png

package com.huang.myfirebase01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

public class MainActivity extends AppCompatActivity {
    // 宣告變數
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("data");
    EditText editText;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化
        editText = findViewById(R.id.editText);
        //確認是否可以連線-第1次測試
        myRef.setValue("Test!");


    }

    public void onClick(View view) {
    }
}


第5步讀資料-全部複製近來

https://ithelp.ithome.com.tw/upload/images/20220204/20119035TzeyKjev5f.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035NEtMJvn96t.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035ZEmqFAX5Ke.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035ogKgNF5QdX.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035rG51KBTFAC.png

目前的程式碼:

package com.huang.myfirebase01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {
    // 宣告變數
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("data");
    EditText editText;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化
        editText = findViewById(R.id.editText);
        //確認是否可以連線-第1次測試
        myRef.setValue("Test!");

        // Read from the database
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // This method is called once with the initial value and again
                // whenever data at this location is updated.
                String value = dataSnapshot.getValue(String.class);
               
            }

            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
                
            }
        });




    }

    public void onClick(View view) {
    }
}

先放入Toast來測試看看
https://ithelp.ithome.com.tw/upload/images/20220204/20119035gCwG0QsxoR.png

package com.huang.myfirebase01;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

public class MainActivity extends AppCompatActivity {
    // 宣告變數
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("data");
    EditText editText;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //初始化
        editText = findViewById(R.id.editText);
        //確認是否可以連線-第1次測試
        myRef.setValue("Test!");

        // Read from the database
        myRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // This method is called once with the initial value and again
                // whenever data at this location is updated.
                String value = dataSnapshot.getValue(String.class);
                Toast.makeText(MainActivity.this,value,Toast.LENGTH_SHORT).show();

            }

            @Override
            public void onCancelled(DatabaseError error) {
                // Failed to read value
                Toast.makeText(MainActivity.this,"FAIL",Toast.LENGTH_SHORT).show();

            }
        });




    }

    public void onClick(View view) {
    }
}

到目前的程式碼:

package com.huang.myfirebase01;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;


import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
    //宣告變數
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("data");
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
    }

    public void onClick(View view) {
        switch(view.getId()){
            case R.id.button://新增1
                String str = editText.getText().toString().trim();
                myRef.child("BB").setValue(str);
                //myRef.setValue(str);
                break;
            case R.id.button2://刪除
                myRef = database.getReference("data");
                //myRef.removeValue();//移除參考點的所有值
                myRef.child("BB").removeValue();//移除子節點BB的所有值
                break;
            case R.id.button3://更新
                myRef = database.getReference("data");
                HashMap<String, Object> hm = new HashMap<>();
                hm.put("KK", "1111111");
                myRef.updateChildren(hm);
                break;
        }
    }
}

來RUN看看~也是要用手機測試

https://ithelp.ithome.com.tw/upload/images/20220204/20119035sbpmzbSa5a.png

在手機看-

https://ithelp.ithome.com.tw/upload/images/20220204/20119035CFGhtIq4Hm.jpg

https://ithelp.ithome.com.tw/upload/images/20220204/20119035bkYqycFyB3.jpg


新增子節點的方法-

目前長這樣-
https://console.firebase.google.com/project/mygjun-f9bb9/database/mygjun-f9bb9-default-rtdb/data

https://ithelp.ithome.com.tw/upload/images/20220204/20119035G9S0g0ytBJ.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035fjHRg0PAb2.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035cQFuQj0QiV.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035Vo7F1MrrkT.png


https://ithelp.ithome.com.tw/upload/images/20220204/20119035DaefOZvSxy.png
來測試這句

case R.id.button2://刪除
                myRef = database.getReference("data");
                //myRef.removeValue();//移除參考點的所有值
                myRef.child("BB").removeValue();//移除子節點BB的所有值
                break;

https://ithelp.ithome.com.tw/upload/images/20220204/20119035nEeTWjXNIR.png

https://ithelp.ithome.com.tw/upload/images/20220204/20119035BMOhggFd8q.jpg


來測試這句

case R.id.button3://更新
                myRef = database.getReference("data");
                HashMap<String, Object> hm = new HashMap<>();
                hm.put("KK", "1111111");
                myRef.updateChildren(hm);
                break;

按更新只有 hm.put("KK", "1111111");

https://ithelp.ithome.com.tw/upload/images/20220204/20119035OhhO3o7up9.png


再貼一次程式碼:

package com.huang.myfirebase01;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;


import java.util.HashMap;

public class MainActivity extends AppCompatActivity {
    //宣告變數
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("data");
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = findViewById(R.id.editText);
    }

    public void onClick(View view) {
        switch(view.getId()){
            case R.id.button://新增1
                String str = editText.getText().toString().trim();
                myRef.child("BB").setValue(str);
                //myRef.setValue(str);
                break;
            case R.id.button2://刪除
                myRef = database.getReference("data");
                //myRef.removeValue();//移除參考點的所有值
                myRef.child("BB").removeValue();//移除子節點BB的所有值
                break;
            case R.id.button3://更新
                myRef = database.getReference("data");
                HashMap<String, Object> hm = new HashMap<>();
                hm.put("KK", "1111111");
                myRef.updateChildren(hm);
                break;
        }
    }
}

最近都在看C#來說說Android和Microsoft Visuall Studio軟體操作(C#)很雷的地方:

  1. https://ithelp.ithome.com.tw/upload/images/20211010/20119035PDioIpkaAf.png

在Android的按鈕或放框框要填字的地方四邊中一定要有一邊要有綁定

2.在Microsoft Visuall Studio軟體操作(C#)會有按"按鈕2下"去啟動"Click事件"但是新手不知道總是會很手癢得去按兩次,就變成"Click事件"很多次,然後就做不出來了~還好Android沒有這個問題
3.在C#裡面若要使用關鍵字前面加上@,在Android裡面也是有,不過是真的當"關鍵字使用"..在JAVA的世界裡尤其是網頁常用的"springboot"使用的超嚴重的
4.C#在宣告一個常數時會用const來宣告語法像是一年有12個月就是private const int months=12;但是在Android裡面沒有
5.C#在命名變數的部分int score;是代表把score命名為整數.然後score=90代表的是score的值.目前的寫法都是int score=90比較快

而在Android則是命名按鈕RadioGroup sex;
CheckBox c1,c2,c3;
TextView show;

6.然後我覺得x++和x--還有--x和++x也是很大的"迷"
/images/emoticon/emoticon06.gif

這個一定要來個範例的阿~不然怎麼會懂0.0

EX1.
int x=20
int y;
y=x--;
//結果y=20 ; x=19 因為y=i再做x--


EX2.
int x=20
int y;
y=--x;
//結果y=19 ; x=19 因為先做x--再做y=x


EX3.

int x,y,z;
x=10;
y=x++*3;
//結果x先乘以3並指定給y之後,x再執行+1,故y=30;x=11

z=++y*2 //結果y先+1.再乘以2指定給z.故z=62;y=31

希望...可以讓我繼續有鐵人發文的機會~拜託拜託


上一篇
第24天~Firebase
下一篇
第26天~用電燈的照片代表連到感應器
系列文
就是從無到有寫app31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言